home *** CD-ROM | disk | FTP | other *** search
/ Windows Expert / Windows Expert.iso / windownt / ibmsyn.zip / SEMFISTR.H < prev    next >
Text File  |  1992-09-11  |  14KB  |  248 lines

  1.  
  2. /* NT IBM SDLC Adapter Device Driver: Tracing */
  3.  
  4. typedef UCHAR  TRC_NAME[2];
  5. typedef USHORT TRC_WORD;
  6. typedef ULONG  DWORD;
  7.  
  8. #ifdef XDEBUG                           /* extra debugging?                  */
  9. #define XASSERT(c) ASSERT(c)
  10. #else
  11. #define XASSERT(c)
  12. #endif
  13. #define assert ASSERT                   /* when I say assert, i mean ASSERT! */
  14.  
  15. /*****************************************************************************/
  16. /* Tracing                                                                   */
  17. /*                                                                           */
  18. /* TRACE_OBJECT depends on the objects having a TRC_NAME.                    */
  19. /* The registered code then is FfOo - 2 chars of function, 2 giving the name */
  20. /* of the object.                                                            */
  21. /*                                                                           */
  22. /* Every trace entry is 4 bytes.  Wraparound is only checked when putting in */
  23. /* the start of an entry. If the implementation of TRACE_OBJECT/EVENT as it  */
  24. /* stands now is too slow, we can define TRACE_EVENT_WORD(c1,c2,c3,c4)       */
  25. /* as (c1<<24)+(c2<<16) etc. and use those values directly                   */
  26. /*****************************************************************************/
  27.  
  28. #ifdef IBMSYNC_TRACE
  29.  
  30. #define         TRC_ENTRIES   1024 /* entry count*/
  31. #define         TRC_ESIZ      4 /* entry size */
  32. #define         TRC_BUFSIZE   (TRC_ENTRIES*TRC_ESIZ)
  33. #define         TRC_BUFOVERRUN 4        /* see TRC_WRAPCHECK below           */
  34. #define         TrcPtr2Far   (TrcBuffer+sizeof(TrcBuffer) - 16)
  35.                                         /* leave 16 bytes spare @ end to     */
  36.                                         /* catch any overflow situations!    */
  37.  
  38. #define DEBUG_PRINT(string)   DbgPrint string
  39.  
  40. #define TRACE_INIT()          { TrcPtr = TrcBuffer;                          \
  41.                                 memset (TrcBuffer, 0, sizeof(TrcBuffer));    \
  42.                               }
  43. /* WRAPCHECK's ASSERTion: we may have this sequence
  44.    - check on non-interrupt side for wrap-check
  45.    - get interrupt
  46.    - check on interrupt side for wrap-check
  47.    - now both sides feel free to increment - so can overrun TrcPtr by 4
  48.    - but this should go no further - hence check on BUFOVERRUN=4
  49. */
  50. #define TRC_WRAPCHECK()       if (TrcPtr >= TrcPtr2Far)                      \
  51.                               {                                              \
  52.                                 ASSERT(TrcPtr<=(TrcPtr2Far+TRC_BUFOVERRUN)); \
  53.                                 /* mustn't go past end! */                   \
  54.                                 TrcPtr = TrcBuffer;                          \
  55.                               }
  56. #define TRC_IN_CHAR(c)        *(TrcPtr++) = ((UCHAR) c)
  57. #define TRC_RE_SET(c)         *(TrcPtr-1) = ((UCHAR) c)
  58. #define TRC_IN_WORD(wval)     *(CAST(TrcPtr,TRC_WORD *)++) = CAST(wval,TRC_WORD)
  59. #define TRC_IN_DW(dval)       *(((DWORD *)TrcPtr)++)    = ((DWORD   ) (dval))
  60.  
  61. #define TRC_IN_PWORD(wp)      TRC_IN_WORD (MAKETYPE(*wp, TRC_WORD))
  62. #define TRC_IN_PDW(dp)        TRC_IN_DW   (MAKETYPE(*dp, DWORD))
  63.  
  64. #define TRACE_OBJECT(f,o)   { TRC_WRAPCHECK();                                \
  65.                               TRC_IN_PWORD(#f);    /* 'f' is 2 literal chars*/\
  66.                               TRC_IN_PWORD(o.Name);/* 'o' is a .Name'd objct*/\
  67.                             }
  68. #define TRACE_ACTION(a,p)   { TRC_WRAPCHECK();                                \
  69.                               TRC_IN_PWORD(#a);   /* 'a' is action name     */\
  70.                               TRACE_WORD(p);      /* 'p' is trace param     */\
  71.                             }
  72. #define TRACE_CHAR(c)       { TRC_WRAPCHECK(); TRC_IN_CHAR(c); }
  73. #define TRACE_DWORD(d)      {                                      \
  74.                               DWORD dd = CAST (d, DWORD);          \
  75.                               char * pd = CAST(&dd, char *);       \
  76.                               TRC_WRAPCHECK();                     \
  77.                               TRC_IN_CHAR(*(pd+3));                \
  78.                               TRC_IN_CHAR(*(pd+2));                \
  79.                               TRC_IN_CHAR(*(pd+1));                \
  80.                               TRC_IN_CHAR(*(pd  ));                \
  81.                             }
  82. #define TRACE_WORD(w)       {                                      \
  83.                               SHORT ww = CAST (w, SHORT);          \
  84.                               char * pw = CAST(&ww, char *);       \
  85.                               TRC_WRAPCHECK();                     \
  86.                               TRC_IN_CHAR(*(pw+1));                \
  87.                               TRC_IN_CHAR(*(pw  ));                \
  88.                             }
  89. //#define TRACE_PDWORD(pd)    TRACE_DWORD (CAST ((*pd), DWORD))
  90. #define TRACE_EVENT(d)      { TRC_WRAPCHECK();                                \
  91.                               TRC_IN_PDW(#d);                                 \
  92.                             }
  93. #define TRACE_EVENTNAME(d)  { TRC_WRAPCHECK();                                \
  94.                               TRC_IN_PDW(d);                                  \
  95.                             }
  96. #define TRACE_NEWLINE()     { TRACE_CHAR ('&');                               \
  97.                               while ((TrcPtr-TrcBuffer) & 0x0F)               \
  98.                                 TRACE_CHAR('&');                              \
  99.                             }
  100. #define TRACE_RCZERO(var)   { if (!var) TRACE_ACTION (Rc,0); } /*no trc if !0*/
  101. #define TRACE_RCFALSE(var)  TRACE_RCZERO(var)
  102. #define TRACE_RCNONZERO(var) {if (var)  TRACE_ACTION (Rc,var); } /*no trc if 0 */
  103. #define TRACE_NTFAILURE(v)  { if (!NT_SUCCESS(v))                             \
  104.                               {                                               \
  105.                                 TRACE_EVENT (NtFl)                            \
  106.                                 TRC_IN_DW (v);                                \
  107.                               }                                               \
  108.                             }
  109. #define TRACE_DATABYTE(s,v) { TRACE_EVENT(s); TRC_RE_SET(v); }
  110.  
  111. #define TRACE_RC(var)       { TRACE_ACTION(Rc, (TRC_WORD) var); }
  112.  
  113. /*****************************************************************************/
  114. /* TRACE EVENTS.   '_' == { etc. (entry) or } etc. (exit)                    */
  115. /* TRACE DATABYES. '.' == databyte value                                     */
  116. /*                                                                           */
  117. /* Type   Cmd_   Adapter command sequence                                    */
  118. /*        ----   ---------------------------------------------               */
  119. /* Objct  Ad     Adapter (device extension)                                  */
  120. /* Call   ARs_   Adapter reset (low level)                                   */
  121. /* Call   C73_   Close8273Sequence                                           */
  122. /* Call   DevI   Device Successfully initialised                             */
  123. /* Call   DiNa   DeviceInit: No adapter                                      */
  124. /* Call   DiNd   DeviceInit: No device allocated by create device            */
  125. /* Call   DmaX   Dma buffer crosses 64k                                      */
  126. /* Call   DPC_   Routine: DPC.                                               */
  127. /* Call   DrvF   Driver Load Failure                                         */
  128. /* Call   Entr   DriverEntry called from NT                                  */
  129. /* Call   EPC_   Routine: EntryPointClose                                    */
  130. /* Call   EPD_   Routine: EntryPointDevIoctl                                 */
  131. /* Call   EPO_   Routine: EntryPointOpen                                     */
  132. /* Call   EP?_   Routine: EntryPointRogueInterrupt (Int 4 from PCA adapter)  */
  133. /* Call   GV2_   Routine: Get V24                                            */
  134. /* Call   HwIF   Hardware init failure                                       */
  135. /* Call   IAR_   Routine: IoctlAbortRx                                       */
  136. /* Call   IAT_   Routine: IoctlAbortTx                                       */
  137. /* Objct  Ii     Iostatus Information field set                              */
  138. /* Objct  In     Initialise: (Buffer)                                        */
  139. /* Call   InA_   Routine: Initialise adapter                                 */
  140. /* Call   InRF   Init RFDs                                                   */
  141. /* Call   IoC_   Routine: IoctlSetLinkCharacteristics                        */
  142. /* Call   IoI_   Routine: IoctlSetInterfaceRecord                            */
  143. /* Call   IoR_   Routine: IoctlRxFrame                                       */
  144. /* Call   IoRN   Ioctl RxFrame: nothing received (unsatisfied poll)          */
  145. /* Call   IoS_   Routine: IoctlSetInterface Record                           */
  146. /* Call   IoT_   Routine: IoctlTxFrame                                       */
  147. /* Call   IVI_   Routine: IoctlGetV24Input                                   */
  148. /* Call   IVO_   Routine: IoctlSetV24Output                                  */
  149. /* Byte   Mpc    Config byte going to MPCA                                   */
  150. /* Call   OcAs   OpenCreate: Allocate of SpinLock failed                     */
  151. /* Call   OcCi   OpenCreate: Connect to interrupt failed                     */
  152. /* Call   OcWb   OpenCreate: Wrong bus                                       */
  153. /* Word   Op     Open adapter with base address bbbb                         */
  154. /* Word   Ra     Rx AvailableByteCount (RxFSMActionStart)                    */
  155. /* Call   RAI_   Routine: RxFSMActionInvalid                                 */
  156. /* Objct  Rb     Rx Buffer number                                            */
  157. /* Word   Rc     Return code Word                                            */
  158. /*        Rg     RFDNextToGet   - RFD_GOT          (RFD)                     */
  159. /* Word   Rl     Received fram length llll                                   */
  160. /* Call   RFE_   Routine: RxFSMEvent                                         */
  161. /* Word   Rm     RxFSMActionRcvError - ErrorMapArray entry value             */
  162. /* Call   ROk_   Routine: RxFSMActionRcvOK                                   */
  163. /* Objct  Rp     RFDNowBeingPut - RFD_PUT_COMPLETE (RFD)                     */
  164. /* Word   Rs     Rx StartIndex                                               */
  165. /* Call   RSt_   Routine: RxFSMActionStart                                   */
  166. /* Call   RSo_   Routine: RxFSMActionStop                                    */
  167. /* Byte   RxD    Received data byte                                          */
  168. /* Byte   RxR    Receiver result byte                                        */
  169. /* Call   SDM_   Routine: StartDMA                                           */
  170. /* Call   SLC_   Routine: SetLinkConfig                                      */
  171. /* Word   St     Non-success NT status                                       */
  172. /* Call   T!!!   Routine: TxFSMAction Invalid!                               */
  173. /* Word   Ta     Ta Tx BuffserSpaceAvailable                                 */
  174. /* Call   TAb    Routine: TxFSMActionAbort                                   */
  175. /* Word   Tb     Tb TxNextToBuffer                                           */
  176. /* Byte   TEb    Transmit result error byte                                  */
  177. /* Call   TEr    Routine: TxFSMActionEndError                                */
  178. /* Word   Tn     Tn BufferSpaceNeeded                                        */
  179. /* Call   TPIO   TxPIOData pointer follows                                   */
  180. /* Word   Tt     Tt TxNextToTransmit                                         */
  181. /* Word   Tu     Tu TxStartUnusedArea                                        */
  182. /* Word   Tx     Tx LinkMaxFrameSize                                         */
  183. /* Byte   TxD    Transmit data byte                                          */
  184. /* Byte   TxR    Transmit result byte                                        */
  185. /* Call   WaTo   WAITUNTIL Timeout (leading to hardware error incremented)   */
  186. /* Call   XEO_   Routine: SynchEntryPointOpen                                */
  187. /* Call   XR8_   Routine: SynchReset8273                                     */
  188. /* Call   XTA_   Routine: SynchTerminateAdapter                              */
  189. /* Call   ZDM_   Zap (= Mask) DMA                                            */
  190. /*                                                                           */
  191. /*                                                                           */
  192. /*****************************************************************************/
  193.  
  194. #else
  195.  
  196. #define DEBUG_PRINT(string)
  197.  
  198. #define TRACE_OBJECT(f,o)
  199. #define TRACE_ACTION(a,p)
  200. #define TRACE_CHAR(c)
  201. #define TRACE_DWORD(d)
  202. #define TRACE_PDWORD(pd)
  203. #define TRACE_EVENT(d)
  204. #define TRACE_NEWLINE()
  205. #define TRACE_RCZERO(var)
  206. #define TRACE_RCFALSE(var)
  207. #define TRACE_RCNONZERO(var)
  208. #define TRACE_NTFAILURE(v)
  209. #define TRACE_DATABYTE(s,v)
  210. #define TRACE_RC(var)
  211.  
  212. #endif
  213.  
  214. #ifdef XDEBUG
  215.  
  216. #define XTRACE_OBJECT     TRACE_OBJECT
  217. #define XTRACE_ACTION     TRACE_ACTION
  218. #define XTRACE_CHAR       TRACE_CHAR
  219. #define XTRACE_DWORD      TRACE_DWORD
  220. #define XTRACE_PDWORD     TRACE_PDWORD
  221. #define XTRACE_EVENT      TRACE_EVENT
  222. #define XTRACE_NEWLINE    TRACE_NEWLINE
  223. #define XTRACE_RCZERO     TRACE_RCZERO
  224. #define XTRACE_RCFALSE    TRACE_RCFALSE
  225. #define XTRACE_RCNONZERO  TRACE_RCNONZERO
  226. #define XTRACE_NTFAILURE  TRACE_NTFAILURE
  227. #define XTRACE_DATABYTE   TRACE_DATABYTE
  228. #define XTRACE_RC         TRACE_RC
  229.  
  230. #else
  231.  
  232. #define XTRACE_OBJECT(f,o)
  233. #define XTRACE_ACTION(a,p)
  234. #define XTRACE_CHAR(c)
  235. #define XTRACE_DWORD(d)
  236. #define XTRACE_PDWORD(pd)
  237. #define XTRACE_EVENT(d)
  238. #define XTRACE_NEWLINE()
  239. #define XTRACE_RCZERO(var)
  240. #define XTRACE_RCFALSE(var)
  241. #define XTRACE_RCNONZERO(var)
  242. #define XTRACE_NTFAILURE(v)
  243. #define XTRACE_DATABYTE(s,v)
  244. #define XTRACE_RC(var)
  245.  
  246. #endif
  247.  
  248.